package com.lhs.aopcache;

import java.util.Set;

/**
 * 缓存通用接口
 */
public interface Cache {

    /**
     * 缓存区域初始化
     *
     * @param region
     */
    void init(String region);

    /**
     *
     * @param key
     * @
     *
     */
    Object get(String key);

    /**
     * 获取某组下key对应的缓存
     *
     * @param group 组
     * @param key key
     * @return
     */
    Object get(String group, String key);

    /**
     * 根据keys获取缓存
     *
     * @param keys
     * @return
     */
    Object[] get(String[] keys);

    /**
     *
     * @param group
     * @param keys
     * @return
     */
    Object[] get(String group, String[] keys);


    /**
     * @param key
     * @param object
     */
    void put(String key, Object object);

    /**
     *
     * @param key
     * @param object
     */
    void putSafe(String key, Object object);

    /**
     * @param groupName
     * @param key
     * @param object
     */
    void put(String groupName, String key, Object object);

    /**
     * @param group
     * @return
     */
    Set<String> getGroupKeys(String group);

    /**
     * @param group
     *            @
     */
    void cleanGroup(String group);

    /**
     * @
     */
    void clear();

    /**
     * @param key
     *            @
     */
    void remove(String key);

    /**
     * @param key
     *            @
     */
    void remove(String group, String key);

    /**
     * @param keys
     */
    void remove(String[] keys);

    /**
     * @param group
     * @param keys
     *            @
     */
    void remove(String group ,String[] keys);

    /**
     * @return
     */
    String getStats();

    /**
     * @param numberToFree
     * @return @
     */
    int freeMemoryElements(int numberToFree);

    void destroy();

    /**
     *
     * @param manager
     */
    void setCacheManager(CacheManager manager);
}
